package com.learn.acm.bytedance;

import org.junit.jupiter.api.Test;

/**
 * 53. 最大子序和
 * 给定一个整数数组 nums ，找到一个具有最大和的连续子数组（子数组最少包含一个元素），返回其最大和。
 *
 * 示例:
 *
 * 输入: [-2,1,-3,4,-1,2,1,-5,4]
 * 输出: 6
 * 解释: 连续子数组 [4,-1,2,1] 的和最大，为 6。
 * 进阶:
 *
 * 如果你已经实现复杂度为 O(n) 的解法，尝试使用更为精妙的分治法求解。
 * @author zhongshitao
 * @date 2020/9/22 4:33 下午
 */
public class Solution53 {


    @Test
    public void test(){
        System.out.println(maxSubArray(new int[]{-2,1,-3,4,-1,2,1,-5,4}));
    }


    public int maxSubArray(int[] nums) {
        int maxNum = Integer.MIN_VALUE, pre = 0;
        for (int i = 0; i< nums.length;i++) {
            pre = Math.max(nums[i],pre + nums[i]);
            maxNum = Math.max(pre, maxNum);
        }
        return maxNum;
    }


}
